home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / unlink.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  2.2 KB  |  95 lines  |  [TEXT/KAHL]

  1. #include <sys/param.h>
  2. #include <sys/stat.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <fcntl.h>
  7. #include <errno.h>
  8. #include "crtlocal.h"
  9. #include <Aliases.h>
  10. #include <Resources.h>
  11.  
  12. int unlink(const char *name)
  13.     {
  14.     long filenum;
  15.     int i;
  16.     OSErr err;
  17.     HParamBlockRec pb;
  18.     FSSpec name1 = hfs_canon(crt_parID, name, 0);
  19.     if (!*name1.name) return -1;
  20.     pb.fileParam.ioNamePtr = name1.name;
  21.     pb.fileParam.ioVRefNum = name1.vRefNum;
  22.     pb.fileParam.ioDirID = name1.parID;
  23.     err = PBHDeleteSync(&pb);
  24.     if (err) errno = errtran(err);
  25.     return err?-1:0;
  26.     }
  27.  
  28. int symlink(const char *old, const char *new)
  29.     {
  30.     int err;
  31.     FInfo info;
  32.     AliasHandle    alias;
  33.     FSSpec name1 = hfs_canon(crt_parID, new, 0);
  34.     FSSpec oldspec = hfs_canon(name1.parID, old, 1);
  35.     if (!*name1.name) return -1;
  36.     if (!*oldspec.name) return -1;
  37.     err = errtran(FSpGetFInfo(&oldspec, &info));
  38.     if (err)
  39.         FSpCreateResFile(&oldspec,'R*ch','TEXT',0);
  40.     err = errtran(NewAlias(0,&oldspec,&alias));
  41.     if (!err)
  42.         {
  43.         OSErr err;
  44.         int fd,refnum;
  45.         FSpCreateResFile(&name1,info.fdCreator,info.fdType,0);
  46.         err = errtran(ResError());
  47.         if (!err)
  48.             {
  49.             short fRefNum;
  50.             err = errtran(FSpGetFInfo(&name1, &info));
  51.             if (err) return -1;
  52.             info.fdFlags |= 0x8000;
  53.             err = errtran(FSpSetFInfo(&name1, &info));
  54.             if (err) return -1;
  55.             fRefNum = FSpOpenResFile(&name1,fsRdWrPerm);
  56.             if ( fRefNum != -1 )
  57.                 {
  58.                 AddResource((Handle)alias,'alis',0,name1.name);
  59.                 CloseResFile(fRefNum);
  60.                 }
  61.             else err = errtran(ResError());
  62.             }
  63.         }
  64.     return err?-1:0;
  65.     }
  66.     
  67. int readlink(const char *old, char *new, int len)
  68.     {
  69.     int err;
  70.     long tmp;
  71.     char str[MAXPATHLEN];
  72.     Boolean    targetIsFolder,wasAliased;
  73.     FSSpec canon = hfs_canon(crt_parID, old, 0);
  74.     if (!*canon.name) return -1;
  75.     err = errtran(ResolveAliasFile(&canon,true,&targetIsFolder,&wasAliased));
  76.     if (err) return -1;
  77.     if (!wasAliased)
  78.         {
  79.         errno = ENOENT;
  80.         return -1;
  81.         }
  82.     tmp = crt_parID;
  83.     crt_parID = canon.parID;
  84.     getwd(str);
  85.     crt_parID = tmp;
  86.     len = strlen(str);
  87.     tmp = *canon.name;
  88.     *canon.name = '/';
  89.     strncpy(&str[len], (char *)canon.name, tmp+1);
  90.     len += tmp+1;
  91.     str[len] = 0;
  92.     strncpy(new, str, len);
  93.     return len;
  94.     }
  95.